package ibxm;
public class Instrument {
        public String name;
        public int vibrato_type, vibrato_sweep;
        public int vibrato_depth, vibrato_rate;
        public boolean volume_envelope_active, panning_envelope_active;
        public int volume_fade_out;
       
        private Envelope volume_envelope, panning_envelope;
        private int[] key_to_sample;
        private Sample[] samples;
        public Instrument() {
                name = "";
                set_volume_envelope( new Envelope() );
                set_panning_envelope( new Envelope() );
                key_to_sample = new int[ 96 ];
                set_num_samples( 1 );
        }
       
        public Envelope get_volume_envelope() {
                return volume_envelope;
        }
       
        public void set_volume_envelope( Envelope envelope ) {
                if( envelope != null ) {
                        volume_envelope = envelope;
                }
        }
       
        public Envelope get_panning_envelope() {
                return panning_envelope;
        }
       
        public void set_panning_envelope( Envelope envelope ) {
                if( envelope != null ) {
                        panning_envelope = envelope;
                }
        }
       
        public Sample get_sample_from_key( int key ) {
                int sample_idx;
                sample_idx = 0;
                if( key > 0 && key <= key_to_sample.length ) {
                        sample_idx = key_to_sample[ key - 1 ];
                }
                return get_sample( sample_idx );
        }
       
        public void set_key_to_sample( int key, int sample ) {
                if( key > 0 && key <= key_to_sample.length ) {
                        key_to_sample[ key - 1 ] = sample;
                }
        }
       
        public int get_num_samples() {
                return samples.length;
        }
       
        public void set_num_samples( int num_samples ) {
                if( num_samples < 1 ) {
                        num_samples = 1;
                }
                samples = new Sample[ num_samples ];
                set_sample( 0, null );
        }
       
        public Sample get_sample( int sample_index ) {
                Sample sample;
                sample = null;
                if( sample_index >= 0 && sample_index < samples.length ) {
                        sample = samples[ sample_index ];
                }
                if( sample == null ) {
                        sample = samples[ 0 ];
                }
                return sample;
        }
       
        public void set_sample( int sample_index, Sample sample ) {
                if( sample_index >= 0 && sample_index < samples.length ) {
                        samples[ sample_index ] = sample;
                }
                if( samples[ 0 ] == null ) {
                        samples[ 0 ] = new Sample();
                }
        }
}